package com.gm.wj.dao;

import com.gm.wj.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
 * @author Evan
 * @date 2019/4
 */
public interface UserDAO extends JpaRepository<User,Integer> {

    User findByUsername(String username);

    List<User> findAllByUsername(String username);

    User getByUsernameAndPassword(String username,String password);

    /**
     *         @Modifying注解
     * 　　　　1、在@Query注解中编写JPQL实现DELETE和UPDATE操作的时候必须加上@modifying注解，以通知Spring Data 这是一个DELETE或UPDATE操作。
     *
     * 　　　　2、UPDATE或者DELETE操作需要使用事务，此时需要 定义Service层，在Service层的方法上添加事务操作。
     *
     * 　　　　3、注意JPQL不支持INSERT操作。　　
     */
//    @Query(value="SELECT * from user where 1=1 ?1",nativeQuery = true)
//    List<User> find(String queryString);

    // 多条件模糊查询
    @Query(value = "select * from admin_user  where  (?1 is null or identity like ?1) and (?2 is null or enabled like ?2) and (?3 is null or username like ?3) and is_delete = 0",nativeQuery = true)
    List<User> find(String queryKey1, String queryKey2, String queryKey3);

    // 首页数据统计
    @Query(value = "select count(*) from admin_user  where is_delete = 0",nativeQuery = true)
    int countByUser();
}
